home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / lib / include / netEther.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-07  |  5.0 KB  |  178 lines

  1. /*
  2.  * netEther.h --
  3.  *
  4.  *    This defines the format of an ethernet packet.
  5.  *
  6.  *    
  7.  *     The symbol NET_ETHER_BAD_ALIGNMENT must defined for machines that
  8.  *    pad or otherwise mess up the layout of the Net_EtherHdr structure.
  9.  *    This must be defined for machines such as the SPUR where structures
  10.  *    are padded to 4 byte boundries.  To test a machine to see if 
  11.  *    NET_ETHER_BAD_ALIGNMENT is needed, check sizeof(Net_EtherHdr).  If
  12.  *    this number is anything other than the size of an ethernet header 
  13.  *    (14 bytes), NET_ETHER_BAD_ALIGNMENT must be defined in the 
  14.  *    machparam.h file for the machine.
  15.  *
  16.  * Copyright 1988 Regents of the University of California
  17.  * Permission to use, copy, modify, and distribute this
  18.  * software and its documentation for any purpose and without
  19.  * fee is hereby granted, provided that the above copyright
  20.  * notice appear in all copies.  The University of California
  21.  * makes no representations about the suitability of this
  22.  * software for any purpose.  It is provided "as is" without
  23.  * express or implied warranty.
  24.  *
  25.  *
  26.  *
  27.  * $Header: /sprite/src/lib/include/RCS/netEther.h,v 1.15 92/08/05 16:34:40 jhh Exp $ SPRITE (Berkeley)
  28.  */
  29.  
  30. #ifndef _NETETHER
  31. #define _NETETHER
  32.  
  33.  
  34. #include "machparam.h"
  35.  
  36. /*
  37.  * Compare two ethernet addresses.
  38.  */
  39.  
  40. #ifndef NET_ETHER_BAD_ALIGNMENT
  41.  
  42. #define    Net_EtherAddrCmp(e1,e2) Net_EtherAddrCmpPtr(&e1,&e2)
  43.  
  44. /*
  45.  * Compare bytes backward because ethernet address tend to start with the
  46.  * same few bytes.
  47.  */
  48.  
  49. #define    Net_EtherAddrCmpPtr(e1,e2) \
  50.    (!(((e1)->byte6 == (e2)->byte6) && ((e1)->byte5 == (e2)->byte5) && \
  51.     ((e1)->byte4 == (e2)->byte4) && ((e1)->byte3 == (e2)->byte3) && \
  52.     ((e1)->byte2 == (e2)->byte2) && ((e1)->byte1 == (e2)->byte1)))
  53.  
  54. #else     /* NET_ETHER_BAD_ALIGNMENT */
  55.  
  56.  
  57. #define    Net_EtherAddrCmp(e1,e2) (bcmp((e1),(e2), sizeof(Net_EtherAddress)))
  58.  
  59. #define    Net_EtherAddrCmpPtr(e1Ptr,e2Ptr) Net_EtherAddrCmp(*(e1Ptr),*(e2Ptr))
  60.  
  61. #endif /* NET_ETHER_BAD_ALIGNMENT */
  62.  
  63.  
  64. /*
  65.  * Ethernet Address - 6 bytes
  66.  */
  67. #ifndef NET_ETHER_BAD_ALIGNMENT
  68.  
  69. typedef struct {
  70.     unsigned char byte1;
  71.     unsigned char byte2;
  72.     unsigned char byte3;
  73.     unsigned char byte4;
  74.     unsigned char byte5;
  75.     unsigned char byte6;
  76. } Net_EtherAddress;
  77.  
  78. #define    NET_ETHER_ADDR_BYTE1(e)    ((e).byte1)
  79. #define    NET_ETHER_ADDR_BYTE2(e)    ((e).byte2)
  80. #define    NET_ETHER_ADDR_BYTE3(e)    ((e).byte3)
  81. #define    NET_ETHER_ADDR_BYTE4(e)    ((e).byte4)
  82. #define    NET_ETHER_ADDR_BYTE5(e)    ((e).byte5)
  83. #define    NET_ETHER_ADDR_BYTE6(e)    ((e).byte6)
  84.  
  85. #ifdef sun4
  86. #define    NET_ETHER_ADDR_COPY(src,dst)    \
  87.     ((dst).byte1 = (src).byte1);    \
  88.     ((dst).byte2 = (src).byte2);    \
  89.     ((dst).byte3 = (src).byte3);    \
  90.     ((dst).byte4 = (src).byte4);    \
  91.     ((dst).byte5 = (src).byte5);    \
  92.     ((dst).byte6 = (src).byte6)
  93. #else
  94. #define    NET_ETHER_ADDR_COPY(src,dst) ((dst) = (src))
  95. #endif
  96.  
  97. #else 
  98.  
  99. typedef unsigned char Net_EtherAddress[6];
  100.  
  101. #define    NET_ETHER_ADDR_BYTE1(e)    ((e)[0])
  102. #define    NET_ETHER_ADDR_BYTE2(e)    ((e)[1])
  103. #define    NET_ETHER_ADDR_BYTE3(e)    ((e)[2])
  104. #define    NET_ETHER_ADDR_BYTE4(e)    ((e)[3])
  105. #define    NET_ETHER_ADDR_BYTE5(e)    ((e)[4])
  106. #define    NET_ETHER_ADDR_BYTE6(e)    ((e)[5])
  107.  
  108. #define    NET_ETHER_ADDR_COPY(src,dst) \
  109.             (bcopy((src),(dst),sizeof(Net_EtherAddress)))
  110.  
  111. #endif /* NET_ETHER_BAD_ALIGNMENT */
  112.  
  113. /*
  114.  * Ethernet Header.- 14 bytes 
  115.  */
  116.  
  117. #ifndef NET_ETHER_BAD_ALIGNMENT
  118.  
  119. typedef struct {
  120.     Net_EtherAddress destination;
  121.     Net_EtherAddress source;
  122.     unsigned short   type;        /* valid types defined below */
  123. } Net_EtherHdr;
  124.  
  125. #define    NET_ETHER_HDR_DESTINATION(e)    ((e).destination)
  126. #define    NET_ETHER_HDR_SOURCE(e)        ((e).source)
  127. #define    NET_ETHER_HDR_TYPE(e)        ((e).type)
  128.  
  129. #define    NET_ETHER_HDR_DESTINATION_PTR(e)    &((e).destination)
  130. #define    NET_ETHER_HDR_SOURCE_PTR(e)        &((e).source)
  131. #define    NET_ETHER_HDR_TYPE_PTR(e)        &((e).type)
  132.  
  133. #define    NET_ETHER_HDR_COPY(src, dst) ((dst) = (src))
  134.  
  135. #else 
  136.  
  137. typedef unsigned char Net_EtherHdr[14];
  138.  
  139. #define    NET_ETHER_HDR_DESTINATION(e)    ((unsigned char *) (e))
  140. #define    NET_ETHER_HDR_SOURCE(e)        ((unsigned char *) (e+6))
  141. #define    NET_ETHER_HDR_TYPE(e)        (*((unsigned short *) (e+12)))
  142.  
  143. #define    NET_ETHER_HDR_DESTINATION_PTR(e)    ((unsigned char *) (e))
  144. #define    NET_ETHER_HDR_SOURCE_PTR(e)        ((unsigned char *) (e+6))
  145. #define    NET_ETHER_HDR_TYPE_PTR(e)        (*((unsigned short *) (e+12)))
  146.  
  147. #define    NET_ETHER_HDR_COPY(src, dst) (bcopy(src,dst,sizeof(Net_EtherHdr)))
  148.  
  149. #endif /* NET_ETHER_BAD_ALIGNMENT */
  150.  
  151. /*
  152.  * Minimum and maximum packet sizes. The maximum is actually 1518, but
  153.  * for some reason it is set here to 1514.  I wouldn't change it unless
  154.  * you're sure you won't break something in the kernel. JHH
  155.  */
  156.  
  157. #define    NET_ETHER_MIN_BYTES    64
  158. #define    NET_ETHER_MAX_BYTES    1514
  159.  
  160. /*
  161.  * Definitions of known ethernet packet types (from rfc990, except for SPRITE
  162.  * and TRAIL).
  163.  */
  164. #define NET_ETHER_PUP            0x0200
  165. #define NET_ETHER_PUP_ADDR_TRANS    0x0201
  166. #define NET_ETHER_XNS_IDP        0x0600
  167. #define NET_ETHER_IP            0x0800
  168. #define NET_ETHER_ARP            0x0806
  169. #define NET_ETHER_XNS_COMPAT        0x0807
  170. #define NET_ETHER_SPRITE        0x0500
  171. #define NET_ETHER_SPRITE_ARP        0x0502 /* deprecated */
  172. #define NET_ETHER_SPRITE_DEBUG        0x0504
  173. #define NET_ETHER_TRAIL            0x1000
  174. #define NET_ETHER_REVARP        0x8035
  175. #define NET_ETHER_MOP            0x6001
  176.  
  177. #endif /* _NETETHER */
  178.